<?php

class Razred extends BaseRazred
{
    public function __toString()
    {
        return RazredPeer::razredRimski($this->getRazred()).' - '.$this->getSlovo();
    }

    public function save(PropelPDO $con = null)
    {
        $new = 1;
        if($this->getId())
          $new = 0;

        $con = Propel::getConnection();
        try
        {
            $con->beginTransaction();

            // Promena smera
             if(!$new and $this->isColumnModified('razred.SMER_ID'))
             {
                // Predmet razred profesor
                $predmet_smers = $this->getSmer()->getPredmetSmers();
                $stari_predmets = DbFinder::from('PredmetRazred')->select('PredmetId')->where('RazredId', $this->getId())->find();
                $novi_predmets = array();
                foreach($predmet_smers as $predmet_smer)
                {
                   $novi_predmets[] = $predmet_smer->getPredmetId();
                   if(!in_array($predmet_smer->getPredmetId(), $stari_predmets))
                   {
                      $p_r = new PredmetRazred();
                      $p_r->setRazredId($this->getId());
                      $p_r->setPredmetId($predmet_smer->getPredmetId());
                      $p_r->save($con);
                   }
                }

                foreach($stari_predmets as $stari_predmet)
                if(!in_array($stari_predmet, $novi_predmets))
                  DbFinder::from('PredmetRazred')->where('RazredId', $this->getId())->where('PredmetId', $stari_predmet)->delete();
             }

             parent::save($con);

             // Predmet razred profesor
             if($new)
             {
               $predmet_smers = $this->getSmer()->getPredmetSmers();
               foreach($predmet_smers as $predmet_smer)
               {
                  $p_r = new PredmetRazred();
                  $p_r->setRazredId($this->getId());
                  $p_r->setPredmetId($predmet_smer->getPredmetId());
                  $p_r->save($con);
               }
             }

             // Raspored ( X 2 - tip 1 i 2 ) samo ako je novi razred
             if($new)
             {
               $i=1;
               while($i < 7)
               {
                 $raspored = new Raspored();
                 $raspored->setRazredId($this->getId());
                 $raspored->setDan($i++);
                 $raspored->setTip(1);
                 $raspored->save($con);
               }

               $i=1;
               while($i < 7)
               {
                 $raspored = new Raspored();
                 $raspored->setRazredId($this->getId());
                 $raspored->setDan($i++);
                 $raspored->setTip(2);
                 $raspored->save($con);
               }
             }

             $con->commit();
        }
        catch(Exception $e)
        {
            $con->rollBack();
            throw $e;
        }
    }

    public function getRazredni()
    {
        return DbFinder::from('Profesor')->findPk($this->getProfesorId());
    }

    /**
    * lista ucenika iz razreda ili grupe za select
    *
    */
    public function getUcenikList()
    {
        $i_obj = sfContext::getInstance()->getI18N();
        $ucenik_arr = array();
        $ucenik_arr[0] = sfContext::getInstance()->getI18N()->__("Izaberi");
        if($this->getSmer()->getTip() != SmerPeer::$tip['grupni'])
          $uceniks = DbFinder::from('Ucenik')->join('Profil')->withColumn('Profil.Prezime', 'Prezime')->withColumn('Profil.Ime', 'Ime')->where('RazredId', $this->getId())->orderBy('RedBr')->find();

        else
        {
            $ucenik_razreds = DbFinder::from('UcenikRazred')->findBy('RazredId', $this->getId());
            $ucenik_r_arrs = array();
            foreach($ucenik_razreds as $ucenik_razred)
              $ucenik_r_arrs[] = $ucenik_razred->getUcenikId();

            $uceniks = DbFinder::from('Ucenik')->join('Profil')->withColumn('Profil.Prezime', 'Prezime')->withColumn('Profil.Ime', 'Ime')->where('Id', 'in', $ucenik_r_arrs)->orderBy('RedBr')->find();
        }
        foreach($uceniks as $ucenik)
          $ucenik_arr[$ucenik->getId()] = $ucenik->getRedBr().'. '.$ucenik->getColumn('Prezime').' '.$ucenik->getColumn('Ime');
        return $ucenik_arr;
    }

    /**
    * lista id-ova ucenika iz razreda ili grupe
    *
    */
    public function getUcenikIds()
    {
       if($this->getSmer()->getTip() != SmerPeer::$tip['grupni'])
         $uceniks = DbFinder::from('Ucenik')->select('Id')->where('RazredId', $this->getId())->find();
       else $uceniks = DbFinder::from('UcenikRazred')->select('UcenikId')->where('RazredId', $this->getId())->find();

       return $uceniks;

    }

    /**
    * Svi predmeti razreda array($predmet_id => $predmet_naziv)
    *
    * @param int $placeholder sa ili bez placeholdera
    * @param int $izborni sa ili bez izbornih
    */
    public function getPredmets($placeholder = 1, $izborni = 1, $add_jezik = 1, $text = 'Izaberi predmet')
    {
        if($placeholder)
        {
          $i_obj = sfContext::getInstance()->getI18N();
          $predmet_arr = array();
          if($text)
            $predmet_arr[0] = sfContext::getInstance()->getI18N()->__($text);
          $predmets = $this->getSmer()->getPredmetSmersJoinPredmet();
          foreach($predmets as $predmet)
            $predmet_arr[$predmet->getPredmet()->getId()] = $predmet->getPredmet();
        }
        else
        {
          $i_obj = sfContext::getInstance()->getI18N();
          $predmet_arr = array();
          if($text)
            $predmet_arr[0] = sfContext::getInstance()->getI18N()->__($text);
          $predmets = DbFinder::from('PredmetSmer')->join('Predmet')->with('Predmet')->where('PredmetSmer.SmerId', $this->getSmerId())->where('Predmet.Tip', '<>', PredmetPeer::$tip['placeholder'])->find();
          foreach($predmets as $predmet)
            $predmet_arr[$predmet->getPredmet()->getId()] = $predmet->getPredmet();
        }

        if($izborni)
        {
           $grupa_dbs = DbFinder::from('UcenikRazred')->join('Ucenik')->join('Razred')->join('Smer')->withColumn('Smer.Naziv', 'SmerId')->where('Ucenik.RazredId', $this->getId())->find();
           $smers = array();
           foreach($grupa_dbs as $grupa_db)
           {
              $smers[] = $grupa_db->getColumn('SmerId');
           }
           $izborni_dbs = DbFinder::from('Predmet')->where('Predmet', 'in', $smers)->find();
           foreach($izborni_dbs as $izborni_db)
             $predmet_arr[$izborni_db->getId()] = $izborni_db->getPredmetKratki();
        }

        if($add_jezik)
        {
           $jezik = DbFinder::from('Predmet')->findPk($this->getJezik());
           if($jezik)
             $predmet_arr[$jezik->getId()] = $jezik->getPredmetKratki();
        }

        return $predmet_arr;
    }

    /**
    * Svi predmeti razreda array($predmet_id => $predmet_naziv)
    *
    * @param int $placeholder sa ili bez placeholdera
    * @param int $izborni sa ili bez izbornih
    */
    public function getPredmetFulls($placeholder = 1, $izborni = 1)
    {
        if($placeholder)
        {
          $i_obj = sfContext::getInstance()->getI18N();
          $predmet_arr = array();
          $predmet_arr[0] = sfContext::getInstance()->getI18N()->__("Izaberi");
          $predmets = $this->getSmer()->getPredmetSmersJoinPredmet();
          foreach($predmets as $predmet)
            $predmet_arr[$predmet->getPredmet()->getId()] = $predmet->getPredmet();
        }
        else
        {
          $i_obj = sfContext::getInstance()->getI18N();
          $predmet_arr = array();
          $predmet_arr[0] = sfContext::getInstance()->getI18N()->__("Izaberi predmet");
          $predmets = DbFinder::from('PredmetSmer')->join('Predmet')->withColumn('Predmet.PredmetNaziv', 'PredmetNaziv')->where('PredmetSmer.SmerId', $this->getSmerId())->where('Predmet.Tip', '<>', PredmetPeer::$tip['placeholder'])->find();
          foreach($predmets as $predmet)
            $predmet_arr[$predmet->getPredmetId()] = $predmet->getColumn('PredmetNaziv');
        }

        if($izborni)
        {
           $grupa_dbs = DbFinder::from('UcenikRazred')->join('Ucenik')->join('Razred')->join('Smer')->withColumn('Smer.Naziv', 'SmerId')->where('Ucenik.RazredId', $this->getId())->find();
           $smers = array();
           foreach($grupa_dbs as $grupa_db)
           {
              $smers[] = $grupa_db->getColumn('SmerId');
           }
           $izborni_dbs = DbFinder::from('Predmet')->where('Predmet', 'in', $smers)->find();
           foreach($izborni_dbs as $izborni_db)
             $predmet_arr[$izborni_db->getId()] = $izborni_db->getPredmetNaziv();
        }

        $jezik = DbFinder::from('Predmet')->findPk($this->getJezik());
        if($jezik)
          $predmet_arr[$jezik->getId()] = $jezik->getPredmetNaziv();

        return $predmet_arr;
    }
}